/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package emailclient;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;

/**
 * @class ConnectDialog
 * @brief Диалоговое окно для ввода данных о соединении.
 * 
 * Этот класс отображает диалоговое окно для ввода данных при создании
 * соединения с почтовым сервером
 * @author Kazakov A.V.
 * @version 1.0
 */
public class ConnectDialog extends JDialog
{
	/**
	 * типы почтовых серверов
	 */
	private static final String[] TYPES = {"pop3", "imap"};

	/**
	 * комбинированное окно для типов почтовых серверов
	 */
	private JComboBox typeComboBox;

	/**
	 * текстовое поле для сервера
	 */
	private JTextField serverTextField;
	
	/**
	 * текстовое поле для имени пользователя
	 */
	private JTextField usernameTextField;
	
	/**
	 * текстовое поле для SMTP - сервера 
	 */
	private JTextField smtpServerTextField;

	/**
	 * текстовое поле для пароля
	 */
	private JPasswordField passwordField;

	/**
	 * конструктор для диалогового окна
	 * @param parent родительское окно
	 */
	public ConnectDialog(Frame parent)
	{
		//	вызов суперконструктора, определение диалогового окна как модального
		super(parent, true);

		//	указать заголовок диалогового окна
		setTitle("Connect");

		//	обработать события при закрытии
		addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
				actionCancel();
			}
		});

		//	Установка настроечной панели
		JPanel settingsPanel = new JPanel();
		settingsPanel.setBorder(BorderFactory.createTitledBorder(
				"Connection Settings"));

		GridBagConstraints constraints;

		GridBagLayout layout = new GridBagLayout();
		settingsPanel.setLayout(layout);

		JLabel typeLabel = new JLabel("Type:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(typeLabel, constraints);
		settingsPanel.add(typeLabel);

		typeComboBox = new JComboBox(TYPES);
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.WEST;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		constraints.weightx = 1.0D;
		layout.setConstraints(typeComboBox, constraints);
		settingsPanel.add(typeComboBox);

		JLabel serverLabel = new JLabel("Server:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(serverLabel, constraints);
		settingsPanel.add(serverLabel);

		serverTextField = new JTextField(25);
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.WEST;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		constraints.weightx = 1.0D;
		layout.setConstraints(serverTextField, constraints);
		settingsPanel.add(serverTextField);

		JLabel usernameLabel = new JLabel("User name:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(usernameLabel, constraints);
		settingsPanel.add(usernameLabel);

		usernameTextField = new JTextField();
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.WEST;
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 0, 5);
		constraints.weightx = 1.0D;
		layout.setConstraints(usernameTextField, constraints);
		settingsPanel.add(usernameTextField);

		JLabel passwordLabel = new JLabel("Password:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 0, 0);
		layout.setConstraints(passwordLabel, constraints);
		settingsPanel.add(passwordLabel);

		passwordField  = new JPasswordField();
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.WEST;
		constraints.fill = GridBagConstraints.HORIZONTAL;
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 5, 5);
		constraints.weightx = 1.0D;
		layout.setConstraints(passwordField, constraints);
		settingsPanel.add(passwordField);

		JLabel smtpServerLabel = new JLabel("SMTP Server:");
		constraints = new GridBagConstraints();
		constraints.anchor = GridBagConstraints.EAST;
		constraints.insets = new Insets(5, 5, 5, 0);
		layout.setConstraints(smtpServerLabel, constraints);
		settingsPanel.add(smtpServerLabel);

		smtpServerTextField = new JTextField(25);
		constraints = new GridBagConstraints();
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		constraints.insets = new Insets(5, 5, 5, 5);
		constraints.weightx = 1.0D;
		layout.setConstraints(smtpServerTextField, constraints);
		settingsPanel.add(smtpServerTextField);

		//	установка панели кнопок
		JPanel buttonsPanel = new JPanel();

		JButton connectButton = new JButton("Connect");
		connectButton.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				actionConnect();
			}
		});
		buttonsPanel.add(connectButton);

		JButton cancelButton = new JButton("Cancel");
		cancelButton.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				actionCancel();
			}
		});
		buttonsPanel.add(cancelButton);

		//	добавить панель для отображения
		getContentPane().setLayout(new BorderLayout());
		getContentPane().add(settingsPanel, BorderLayout.CENTER);
		getContentPane().add(buttonsPanel, BorderLayout.SOUTH);

		//	оптимизировать размер диалогового окна
		pack();

		//	центрировать диалоговое окно
		setLocationRelativeTo(parent);
	}

	/**
	 * допустимые установки соединения и закрытие диалогового окна
	 */
	private void actionConnect()
	{
		if(serverTextField.getText().trim().length() < 1
				|| usernameTextField.getText().trim().length() < 1
				|| passwordField.getText().trim().length() < 1
				|| smtpServerTextField.getText().length() < 1)
		{
			JOptionPane.showMessageDialog(this, 
					"One or more settings is missing.", 
					"Missing Setting(s)", JOptionPane.ERROR_MESSAGE);
			return;
		}

		//	закрыть диалоговое окно
		dispose();
	}

	/**
	 * Разорвать соединение и выйти из программы
	 */
	private void actionCancel()
	{
		System.exit(0);
	}

	/**
	 * получить тип почтового сервера
	 * @return строка типа почтового сервера
	 */
	public String getServerType()
	{
		return (String) typeComboBox.getSelectedItem();
	}

	/**
	 * получить почтовый сервер
	 * @return строка почтового сервера
	 */
	public String getServer()
	{
		return serverTextField.getText();
	}

	/**
	 * получить имя пользователя
	 * @return строка с именем пользователя
	 */
	public String getUsername()
	{
		return usernameTextField.getText();
	}

	/**
	 * получить пароль
	 * @return строка пароля
	 */
	public String getPassword()
	{
		return new String(passwordField.getPassword());
	}

	/**
	 * получить SMTP сервер
	 * @return строка SMTP сервера
	 */
	public String getSmtpServer()
	{
		return smtpServerTextField.getText();
	}
}
